package com.xbts.system.domain;

import java.math.BigDecimal;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xbts.common.utils.bean.BeanUtils;
import com.xbts.common.enums.ShoppingCarEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.constraints.NotEmpty;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.List;
import javax.validation.constraints.NotNull;

import com.xbts.common.core.domain.BaseEntity;

/**
 * 购物车对象 cn_shopping_car
 *
 * @author xbts
 * @date 2023-08-03
 */
@Data
@ApiModel("购物车对象")
@TableName("cn_shopping_car")
public class CnShoppingCar extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 必须用string 不然会丢失精度
     * 购物车主键
     */
    @TableId
    private String shoppingCarId;

    /** 用户id */
    @ApiModelProperty("用户id")
    private Long userId;

    /** 项目id */
    @ApiModelProperty("项目id")
    private String regionId; // 云服务器必填 ！！！

    /** 创建服务器json 购物车类型为：CLOUD_SERVER时使用该字段 */
    @ApiModelProperty("创建服务器json 购物车类型为：CLOUD_SERVER时使用该字段")
    private String jsonStr;

    /** 修改价格 */
    @ApiModelProperty("修改价格")
    private BigDecimal updatePrice;

    /** 原始价格 */
    @ApiModelProperty("原始价格")
//    @NotNull(message = "原始价格不能为空")
    private BigDecimal originalPrice;

    /** 优惠的金额 */
    @ApiModelProperty("优惠的金额")
    private BigDecimal discountPrice;

    /** 购物车类型(CLOUD_SERVER云服务器 CLOUD_MARKET市场云 GOV_CLOUD政务云) */
    @ApiModelProperty("购物车类型(CLOUD_SERVER云服务器 CLOUD_MARKET市场云 GOV_CLOUD政务云)")
    @NotNull(message = "购物车类型(CLOUD_SERVER云服务器 CLOUD_MARKET市场云 GOV_CLOUD政务云)不能为空")
    private ShoppingCarEnums shoppingCarEnums;

    /** 订单摘要 */
    @ApiModelProperty("订单摘要")
//    @NotEmpty(message = "订单摘要不能为空")
    private String orderAbstract;

    /** 折扣 */
    @ApiModelProperty("折扣")
    private Integer discount;

    // 政务云、云市场模板id
    private String relationId;

    // 是否自动续费，默认不自动续费
//    @NotNull(message = "是否自动续费不能为空")
    private Boolean autoRenew;

    // 购买的期限数量
//    @NotNull(message = "购买数量不能为空")
    private Integer periodNum;

    // 购买方式（0按次 1按天 30按月 365按年）
//    @NotNull(message = "购买方式不能为空")
    private Integer periodType;

    /**
     * 云市场sku
     */
    private Long marketSkuId;

    /**
     * 价格查询对象JSON字符串
     */
    private String priceQueryJsonStr;
    /** 规格实付款 */
    private BigDecimal ec2Price = BigDecimal.ZERO;
    /** 磁盘实付款 */
    private BigDecimal ebsPrice = BigDecimal.ZERO;
    /** 带宽实付款 */
    private BigDecimal vpcPrice = BigDecimal.ZERO;

    @TableField(exist = false)
    private List<CnDataVolume> dataVolumes;

    @TableField(exist = false)
    private String priceKey;

    @JsonIgnore
    public CnOrderItem getCnOrderItem(){
        CnOrderItem cnOrderItem = new CnOrderItem();
        BeanUtils.copyBeanProp(cnOrderItem,this);
        cnOrderItem.setOrderItemId(this.shoppingCarId);
        return cnOrderItem;
    }
}